package com.igeek.exception;

import java.text.ParseException;

/**
 * 抛异常：
 *      throws + 异常类型
 *      throw + 异常的对象
 * throws 关键字作用在方法上，含义是，被throws修饰的方法，可能会有异常，把可能会出现的异常向外抛，抛给了方法调用的一方
 * throw 关键字写在方法体内部代码里，含义是，主动创建一个异常的实例对象，导致代码出现异常，然后就需要对异常的代码进行处理
 *
 * 当throws、throw遇到异常的继承树：
 *      抛出的异常的类型，可以是出现异常的父类或者是她本身
 *      例：出现的异常是 ParseException，那么throws 异常的时候，可以写成：throws ParseException 或者是 throws Exception
 *
 * 处理异常的一个原则：
 *      可以使用父类处理子类，但是不能使用子类去处理父类
 */
public class Demo04 {

    /**
     * 向外抛异常
     * @param num1
     * @param num2
     * @throws ArithmeticException
     */
    public void add(int num1,int num2) throws ParseException {
        System.out.println(num1/num2);
    }

    public void divide(int num1,int num2) throws Exception{

        System.out.println(num1/num2);

        System.out.println("其他的代码");

        if(num2 == 0){
            /*try{
                //主动的创建一个异常的实例对象
                throw new Exception("主动向外抛");
            }catch (Exception e){
                e.printStackTrace();
            }*/
            throw new Exception("主动向外抛");

        }
    }
}

class Demo05{

    /**
     * 调用了向外抛异常的方法，而且这个异常还是非RuntimeException 那么就需要对调用方法的地方进行异常的处理
     * 这里处理异常的方式，就有两种：捕获、抛
     * @param args
     */
    public static void main(String[] args) throws ParseException{
        Demo04 demo04 = new Demo04();
        try{
            demo04.add(19,8);
        }catch (ParseException e){
            e.printStackTrace();
        }

    }
}